/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import connection.AbstractConnection;
import entidades.Fornecedor;
import entidades.Uf;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author Ricardo
 */
public class FornecedorDAO extends AbstractDAO {

    private final String sqlFornecedorById =
            "select p.idpessoa,p.nome,p.telefone,p.email,p.endereco,p.cidade,p.uf_iduf,pj.cnpj,pj.razao_social,f.contato from pessoa p inner join pessoa_juridica pj on pj.pessoa_idpessoa=p.idpessoa inner join fornecedor f on f.pessoa_juridica_pessoa_idpessoa=p.idpessoa where p.idpessoa=?;";

    public FornecedorDAO(AbstractConnection conn) {
        super(conn);
    }

    public Fornecedor getFornecedorById(int id) throws SQLException {
        return getFornecedor(sqlFornecedorById, new Integer(id));
    }

    private Fornecedor getFornecedor(String sql, Object whatFind) throws SQLException {
        Fornecedor forn = null;
        PreparedStatement ps =
                conn.getConnection().prepareStatement(sql);

        if (whatFind instanceof String) {
            ps.setString(1, (String) whatFind);
        } else if (whatFind instanceof Integer) {
            ps.setInt(1, (Integer) whatFind);
        }

        ResultSet rs = ps.executeQuery();

        if (rs == null) {
            return null;
        }

        while (rs.next()) {
            forn = preencheFornecedor(rs);
        }

        conn.closeConnection();

        return forn;

    }

    private Fornecedor preencheFornecedor(ResultSet rs) throws SQLException {
        Fornecedor forn = new Fornecedor();

        forn.setId(rs.getInt("idpessoa"));
        forn.setNome(rs.getString("nome"));
        forn.setTelefone(rs.getString("telefone"));
        forn.setEmail(rs.getString("email"));
        forn.setEndereco(rs.getString("endereco"));
        forn.setCidade(rs.getString("endereco"));
        forn.setUf(getUf(rs));
        forn.setCnpj(rs.getString("cnpj"));
        forn.setRazaoSocial(rs.getString("razao_social"));
        forn.setContato(rs.getString("contato"));

        return forn;

    }

    private Uf getUf(ResultSet rs) throws SQLException {
        Uf uf = null;
        uf = (new UfDAO(getNewConnection())).encontraUf(rs.getString("uf_iduf"));
        return uf;
    }
}
